package com.tangding.common.tools;

import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import com.google.common.base.Strings;
import com.tangding.common.exception.GException;
import com.tangding.common.logx.LogHelp;

public class ErrorConstants {
	public static final int FAIL = 0;//系统异常，请稍后访问！
	public static final int SUCC = 1;//协议请求成功！
	public static final int ERR_DB = 2;//数据库异常，请联系管理员！
	public static final int ERR_REQUEST = 3;//请求数据异常！
	public static final int ERR_REPEATED_LOGIN = 4;//你的帐号已经在其他地方登录了！
	public static final int ERR_LOCK_ACCOUNT = 5;//你当前已经被封号了！
	public static final int ERR_NOT_ACTIVE = 6;//你的账号尚未开启！
	public static final int ERR_ACCOUNT_OVERDUE = 7;//你的账号已过期！
	public static final int ERR_REQUEST_VERSION = 8;//错误的版本号！
	public static final int ERR_ILLEGAL_REQUEST = 9;//非法请求！
	public static final int ERR_FILE_NOT_FOUND = 10;//找不到指定文件！
	public static final int ERR_INIT_DB = 11;//数据库初始化异常！
	public static final int LOGIN_OVERDUE = 12;//登录已经过期，请重新登录！
	public static final int ERR_SIGN = 13;//签名验证错误，请重新登录！
	public static final int LACK_PARAMS_CHECK_SIGN = 14;//缺少校验签名参数，请重新登录！
	public static final int ILLEGAL_PARAMS_CHECK_SIGN = 15;//非法的校验参数，请重新登录！
	public static final int ERR_PARAMS = 16;//请求参数错误！
	public static final int ERR_EMPTY_UPLOAD_PIC = 17;//上传的图片为空！
	public static final int ERR_REQUEST_TOO_FAST = 18;//您的请求速度过快，请休息一会儿！
	public static final int ERR_WRONG_VERSION = 19;//请更新到最新版本！
	public static final int ERR_WRONG_PASSWORD = 20;//登录密码错误！
	public static final int ERR_EMPTY_UPLOAD_FILE = 21;//上传的文件为空！
	public static final int ILLEGAL_UPLOAD_FILE_FORMAT = 22;//非法的文件格式！
	public static final int ERR_LIMIT_MAX_SIZE = 23;//上传的文件超过最大限制！
	public static final int ERR_FORWARD = 24;//服务转发失败！
	public static final int ERR_FORWAR_NO_API = 25;//Hprose服务器不提供此API！
	public static final int ERR_API_TIMEOUT = 26;//游戏服务器API连接超时！
	public static final int ERR_NOT_FOUND_CMD = 27;//请求码未找到！
	public static final int ERR_NOT_SIMULATION = 28;//当前服务器未对指定API进行模拟！
	public static final int HPROSE_REMOTE_ERR = 29;//Hprose调用异常！
	public static final int ERR_ENCODE_AES_128 = 40;//AES128序列化失败！
	public static final int ERR_DECODE_AES_128 = 41;//AES128反序列化失败！
	public static final int ERR_LACK_PERMISSION = 50;//没有足够的权限执行指定操作！
	public static final int USER_NOT_FOUND = 1000;//找不到指定用户！
	public static final int USER_CREATE_FAIL = 1001;//用户创建失败！
	public static final int CANNOT_DELETE_ROOT_ADMIN = 1002;//超级管理员不允许删除！
	public static final int CANNOT_ACT_ROOT_ADMIN = 1003;//超级管理员不允许设置活动范围！
	public static final int UPDATE_USER_INFO_FAIL = 1004;//更新用户信息失败！
	public static final int ILLEGAL_AVATAR_FORMAT = 1005;//非法的头像格式！
	public static final int LOGIN_INCORRECT_CREDENTIALS = 1006;//用户登录账号或密码错误！
	public static final int ERR_UID_EXIST = 1007;//用户uid已经存在！
	public static final int CANNOT_DEL_SELF = 1008;//不能删除自己！
	public static final int CANNOT_DEL_SUPER_ADMIN = 1009;//不能删除超级管理员！
	public static final int LOGIN_EXPIRE = 1010;//登录信息不合法，请重新登录！
	public static final int CLIENT_SECERET_ERR = 1011;//SECERET校验失败，请求驳回！
	public static final int ERR_CREATE_ROLE = 1100;//创建角色失败，请重新尝试！
	public static final int ERR_NO_ROLE = 1101;//未找到指定的代理资源！
	public static final int ERR_GAME_NOT_REGIST = 1200;//游戏未在管理后台进行注册！

	
	static Map<Integer, String> map = new HashMap<Integer, String>();
	
	public static String getDesc(int code) {
		if (map.size() == 0) {
			Document document = null;
			Element root = null;
			String ERR_CODE_URL = System.getenv("err_code");
			if (Strings.isNullOrEmpty(ERR_CODE_URL)) {
				ERR_CODE_URL = "err_code.xml";
			}
			SAXReader reader = new SAXReader();
			try {
				document = reader.read(new File(ERR_CODE_URL));
			} catch (DocumentException e) {
				GException ge = new GException(ERR_FILE_NOT_FOUND, ERR_CODE_URL + " not found!", e);
				LogHelp.doLogAppErr(ge);
			}
			root = document.getRootElement();
			@SuppressWarnings("unchecked")
			List<Element> errs = root.elements("err");
			for (Element e : errs) {
				map.put(Integer.parseInt(e.attributeValue("id")), e.attributeValue("description"));
			}
		}
		
		if (!map.containsKey(code)) {
			return map.get(ErrorConstants.FAIL);
		}
		return map.get(code);
	}
}
